﻿/************************************************************************
** 文  件：
**	Record.h
** 功  能：
**	录像信息
** 作  者：
**	email:lixx2048@163.com
**  wechat:lixiang6153
**  QQ:941415509
** 日  期：
**	2024/03/15	14:00:00
** 说  明：
**	无
** 版  本：
**	2024/03/15	14:00:00		1.0		lixx2048@163.com
/************************************************************************/
#pragma once
#include <string>
#include <memory>
#include <opencv2/opencv.hpp>
#include <opencv2/videoio/videoio.hpp>
#include "../util/DateTime.h"

class Record
{
public:
	Record();
	virtual ~Record();

public:
	virtual bool Start(int fps, int width, int height, std::string path);
	virtual void Stop();
	virtual void Write(cv::Mat& frame);

public:
	std::string GetType();
	void SetType(std::string);

	std::string GetId();
	void SetId(std::string);

	std::string GetDeviceId();
	void SetDeviceId(std::string);

	std::string GetDeviceName();
	void SetDeviceName(std::string);

	std::string GetPath();
	void SetPath(std::string);

	int GetDuration();
	void SetDuration(int);

	int GetFrame();
	void SetFrame(int);

	bool GetPreRecord();
	void SetPreRecord(bool);

	bool GetWriteRecord();
	void SetWriteRecord(bool);

	DateTime GetStartTime();
	void SetStartTime(DateTime);

protected:
	// 录像类型
	std::string m_type = "alarm";
	// 录像编码
	std::string m_id = "";
	// 录像设备
	std::string m_deviceId = "";
	// 设备名称
	std::string m_deviceName = "";
	// 存储路径
	std::string m_path = "";
	// 录像时长
	int m_duration = 10;
	// 录制帧数
	int m_frame = 0;
	// 是否预录
	bool m_preRecord = true;
	// 已写预录
	bool m_writeRecord = false;
	// 开始时间
	DateTime m_startTime = DateTime::Now();
	// 文件句柄
	cv::VideoWriter m_witer;
	// 录像状态
	bool m_recording;
};

typedef std::shared_ptr<Record> RecordPtr;